/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tesis2.pucp.Envio.DAO;

import com.tesis2.pucp.Modelo.TesisCliente;
import com.tesis2.pucp.Modelo.TesisPedido;
import com.tesis2.pucp.Modelo.TesisPedidoxproducto;
import com.tesis2.pucp.Modelo.TesisProducto;
import com.tesis2.pucp.Util.HibernateUtil;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author pachon
 */
public class PedidoDAO {
    
    public void guardarPedido(TesisPedido pedido, ArrayList<TesisProducto> listaProductos, ArrayList<Integer> lista){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(pedido);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }
        Session session2 = HibernateUtil.getSessionFactory().openSession();
        Transaction tx2 =  session2.beginTransaction();
        try {
            int i=0;
            for (TesisProducto c: listaProductos){
                TesisPedidoxproducto pedidoxproducto= new TesisPedidoxproducto();
                pedidoxproducto.setTesisPedido(pedido);
                pedidoxproducto.setTesisProducto(c);
                pedidoxproducto.setCantidad(lista.get(i));
                i++;
                session2.saveOrUpdate(pedidoxproducto);
            }
            tx2.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session2.close();            
        }
    }
    
    public ArrayList<TesisProducto> listarProductos(TesisPedido pedido)
    {
        ArrayList<TesisProducto> listaResultados = new ArrayList<>(); 
        ArrayList<TesisProducto> listaResultadosaux = new ArrayList<>(); 
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        //EL de 
        try{
            List lista = session.createQuery("from TesisProducto order by idproducto").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                TesisProducto p = (TesisProducto) iter.next();
                Hibernate.initialize(p.getAlto());
                Hibernate.initialize(p.getAncho());
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getLargo());
                Hibernate.initialize(p.getPeso());
                Hibernate.initialize(p.getStock());
                Hibernate.initialize(p.getIdproducto());
                listaResultadosaux.add(p);
            }        
            tx.commit();
            
            tx = session.beginTransaction();
            List lista2 = session.createQuery("from TesisPedidoxproducto order by idpedidoxproducto").list();        
            Iterator iter2 = lista2.iterator();
            while (iter.hasNext()) {    
                TesisPedidoxproducto p = (TesisPedidoxproducto) iter2.next();
                Hibernate.initialize(p.getTesisPedido());
                Hibernate.initialize(p.getTesisProducto());
                Hibernate.initialize(p.getCantidad());
                
                for (TesisProducto c: listaResultadosaux){
                    if (c.getIdproducto() == p.getTesisProducto().getIdproducto()){
                        listaResultados.add(c);
                        break;
                    }
                }

                
            }        
            tx.commit();
            
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }       
        
        
    }    
    
     public ArrayList<TesisPedido> listarPedidos()
    {
        ArrayList<TesisPedido> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from TesisPedido order by idpedido").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                TesisPedido p = (TesisPedido) iter.next();
                Hibernate.initialize(p.getDescripcion());
                Hibernate.initialize(p.getIdpedido());
                Hibernate.initialize(p.getLatitud());
                Hibernate.initialize(p.getLongitud());
                Hibernate.initialize(p.getTesisCliente());
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }    
    
}
